package com.szj.shiro1.realm;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;

/**
 * 自定义 Realm，继承 AuthorizingRealm
 */
public class Md5Realm extends AuthorizingRealm {

	//认证
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
		System.out.println("---------------我是Md5Realm-----------------");
		
		//参数token，表示登录时包装的UsernamePasswordToken
		
		//通过用户名到数据库中查用户信息，封装成一个AuthenticationInfo对象返回，方便认证器进行对比
		//获取token中的用户名
		//方法1：直接获取
		String username=(String) token.getPrincipal();
		//方法2：先将token转换
		UsernamePasswordToken tokenUp=(UsernamePasswordToken) token;
		String name=tokenUp.getUsername();
		if(!name.equals("zhangsan")) {
			return null;
		}
		//token中的密码（方法1获取不到这个password）
		String password=new String(tokenUp.getPassword());
		
		//模拟数据库中的密码
		//此为加密后的密码，加密方式：111+盐（zhangsan）+2（散列次数）
		String pwd="3d9e02bf4920144c4956aa485d20b01d";
		
		//info对象表示realm登录对比信息，参数1:用户信息（真实登录中是登录user对象）；参数2：数据库中存的密码；参数3：盐；参数4：当前realm的名字
		SimpleAuthenticationInfo info=new SimpleAuthenticationInfo(name,pwd,ByteSource.Util.bytes("zhangsan"),getName());
		
		return info;
	}
	
	//授权
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		// TODO Auto-generated method stub
		return null;
	}
	
	
}
